package global;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.apache.log4j.Logger;

import util.StringUtils;

/**
 * 定义相关常量公共类.
 * <p>
 * 创建日期：2010-07-01<br>
 * 创建人：Xiyt<br>
 * 修改日期：<br>
 * 修改人：<br>
 * 修改内容：<br>
 * 
 * @author Xiyt
 * @version 1.0
 */
public class Constants {
	
	/***************************************************************************
	 * 一般常量
	 **************************************************************************/
	/**
	 * 操作区分
	 * */
	/** 更新 */
	public static final String TYPE_UPDATE = "UPDATE";

	/** 添加 */
	public static final String TYPE_CREATE = "CREATE";

	/** 上传 */
	public static final String TYPE_UPLOAD = "UPLOAD";

	/** 每页显示最大件数 */
	public static final int PAGE_SIZE = 20;

	/** 显示的页码数 */
	public static final int PAGE_NO_COUNT = 9;

	/** 默认分类ID */
	public static final int DEFAULT_CATEGORYID = 1;

	/** 每页显示图片最大件数 */
	public static final int PAGE_SIZE_PICTURE = 20;

	/** 缩略图宽度 */
	public static int IMAGE_WIDTH = 140;

	/** 缩略图高度 */
	public static int IMAGE_HEIGHT = 140;

	/** 上传文件时指定的参数名 */
	public static final String UPLOAD_FILE_PARAM_NAME = "fileData";
	

	/** 文件路径 */
	public static final String FILE_PATH = "/websrc/file";

	/** 临时路径 */
	public static final String UPLOAD_PICTURE_TEMP_PATH = "/websrc/file/temp";
	
	/** 上传图片保存的路径 */
	public static final String UPLOAD_PICTURE_PATH = "/websrc/file/{0}/picture";
	/** 缩略图文件夹名 */
	public static final String THUMBNAIL = "thumbnail";
	
	/** 普通文件保存的路径 */
	public static final String UPLOAD_FILE_PATH = "/websrc/file/{0}/document";
	
	/** 订阅保存路径 */
	public static final String FEED_FILE_PATH = "/websrc/file/{0}/feed";

	/** 普通文件上传的最大size:100MB*/
	public static final String UPLOAD_FILE_SIZE_LIMIT = "100MB";

	/** 普通文件上传类型限制:*/
	public static final String UPLOAD_FILE_TYPE_LIMIT = "*.*";

	/** 图片上传允许的最大size:1MB */
	public static final String UPLOAD_PICTURE_SIZE_LIMIT = "1MB";

	/** 图片上传的最大保存size:1MB */
	public static final double UPLOAD_PICTURE_MAX_SIZE = 1 * 1024 * 1024;

	/** 图片上传的类型限制:*.jpg;*.jpeg;*.png; */
	public static final String UPLOAD_PICTURE_TYPE_LIMIT = "*.jpg;*.jpeg;*.png;";

	/** 同时上传的文件数量 */
	public static final int UPLOAD_COUNT_LIMIT = 100;
	
	/** 每页显示订阅最大件数 */
	public static final int PAGE_SIZE_FEED = 10;
	
	/** 每页显示订阅最大件数 */
	public static final String EMAIL_BEFORE_TITLE = "来自Anynote：";
	
	/** 发送邮件服务器地址*/
	public static String EMAIL_SMTP_HOST = "smtp.163.com";

	/** 发送邮件账号*/
	public static String EMAIL_ACCOUNT = "Anynote@163.com";

	/** 发送邮件密码*/
	public static String EMAIL_PASSWORD = "1914125xyting";
	
	/** 临时文件路径 */
	public static final String TEMP_FILE_PATH = "/websrc/file/temp";
	
	
	/** html文件模板开始 */
	public final static String HTML_TEMPLET_START = "<html><head><title>Anynote</title><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><body>";
	
	/** html文件模板结束 */
	public final static String HTML_TEMPLET_END = "</body></html>";
	
	/** opml文件模板开始 */
	public final static String OPML_TEMPLET_START = "<?xml version='1.0' encoding='UTF-8'?>\r\n<opml version='1.0'>\r\n<head><title>Anynote订阅列表</title></head>\r\n<body>\r\n";
	
	/** opml文件模板结束 */
	public final static String OPML_TEMPLET_END = "</body>\r\n</opml>";
	
	/** 管理员账户ID */
	public static final String ADMIN_USERID = "admin";

	/** 最大日期 */
	public static final String MAX_DATE = "9999-12-31";

    /** 网络连接类型 1:直接连接 2：代理连接*/
    public static String NETWORK_TYPE = "1";	

	/** 代理服务器IP */
	public static String PROXY_IP = "";

	/** 代理服务器PORT */
    public static int PROXY_PORT = 0;
    
    /** 代理服务器用户名 */
    public static String PROXY_USER = "";
    
    /** 代理服务器密码 */
    public static String PROXY_PASSWORD = "";

	/***************************************************************************
	 * Map常量
	 **************************************************************************/
	/**
	 * 删除区分
	 * */
	/** 未删除-CODE */
	public static final String DEL_FLAG_1 = "1";
	/** 已删除-CODE */
	public static final String DEL_FLAG_2 = "2";
	/** 未删除-NAME */
	public static final String DEL_FLAG_NAME_1 = "有效";
	/** 已删除 -NAME */
	public static final String DEL_FLAG_NAME_2 = "无效";
	public final static Map<String, String> DELFLAG_MAP = new HashMap<String, String>();
	
	/**
	 * 状态
	 * */
	/** 1：公开（启用）-CODE */
	public static final String STATUS_1 = "1";
	/** 2：私人（停用）-CODE */
	public static final String STATUS_2 = "2";
	/** 1：公开（启用） -NAME */
	public static final String STATUS_NAME_1 = "公开";
	/** 2：私人（停用）-NAME */
	public static final String STATUS_NAME_2 = "私人";
	public final static Map<String, String> STATUS_MAP = new HashMap<String, String>();
	
	/**
	 * 用户状态
	 * */
	/** 1：正常-CODE */
	public static final String USER_STATUS_1 = "1";
	/** 2：停用-CODE */
	public static final String USER_STATUS_2 = "2";
	/** 1：正常 -NAME */
	public static final String USER_STATUS_NAME_1 = "正常";
	/** 2：停用-NAME */
	public static final String USER_STATUS_NAME_2 = "停用";
	public final static Map<String, String> USER_STATUS_MAP = new HashMap<String, String>();
	
	/** 账目类型 */
	/** 账目类型:收入 */
	public final static String ACCOUNT_TYPE_1 = "1";
	/** 账目类型:支出 */
	public final static String ACCOUNT_TYPE_2 = "2";
	/** 账目类型:收入 */
	public final static String ACCOUNT_TYPE_NAME_1 = "收入";
	/** 账目类型:支出 */
	public final static String ACCOUNT_TYPE_NAME_2 = "支出";
	
	public final static Map<String, String> ACCOUNT_TYPE_MAP = new HashMap<String, String>();
	
	/** 任务级别 */
	/** 任务级别:高*/
	public final static String LEVEL_1 = "1";
	/** 任务 级别:中 */
	public final static String LEVEL_2 = "2";
	/** 任务级别:低 */
	public final static String LEVEL_3 = "3";
	/** 任务 级别:高*/
	public final static String LEVEL_NAME_1 = "高";
	/** 任务 级别:中 */
	public final static String LEVEL_NAME_2 = "中";
	/** 任务 级别:低 */
	public final static String LEVEL_NAME_3 = "低";
	public final static Map<String, String> LEVEL_TYPE_MAP = new HashMap<String, String>();
	
	/** 任务完成状态 */
	/** 任务:未完成 */
	public final static String COMPLETE_TYPE_1 = DEL_FLAG_1;
	/** 任务:已完成 */
	public final static String COMPLETE_TYPE_2 = DEL_FLAG_2;
	/** 任务:未完成 */
	public final static String COMPLETE_TYPE_NAME_1 = "未完成 ";
	/** 任务:已完成 */
	public final static String COMPLETE_TYPE_NAME_2 = "已完成";
	public final static Map<String, String> COMPLETE_TYPE_MAP = new HashMap<String, String>();
	
	/** 性别 */
	/** 性别:男 */
	public final static String SEX_M = "1";
	/** 性别:女 */
	public final static String SEX_F = "2";
	/** 性别:男 */
	public final static String SEX_NAME_M = "男 ";
	/** 性别:女*/
	public final static String SEX_NAME_F = "女";
	public final static Map<String, String> SEX_MAP = new HashMap<String, String>();

	/** 主页:空白 */
	public final static String HOME_PAGE_0_URL = "/websrc/page/home/home.jsp";
	/** 主页:待办 */
	public final static String HOME_PAGE_1_URL = "/websrc/page/todo/todoList.jsp";
	/** 主页:笔记 */
	public final static String HOME_PAGE_2_URL = "/websrc/page/note/noteList.jsp";
	/** 主页:图片 */
	public final static String HOME_PAGE_3_URL = "/websrc/page/picture/pictureList.jsp";
	/** 主页:账目 */
	public final static String HOME_PAGE_4_URL = "/websrc/page/account/accountList.jsp";
	/** 主页:订阅 */
	public final static String HOME_PAGE_5_URL = "/websrc/page/feedViewer/feedFavorite.jsp";
	/** 主页:用户 */
	public final static String HOME_PAGE_6_URL = "/websrc/page/user/userList.jsp";
	/** 主页:文档 */
	public final static String HOME_PAGE_7_URL = "/websrc/page/document/documentList.jsp";
	public final static Map<String, String> HOME_PAGE_MAP = new HashMap<String, String>();
	
	/** 模块显示隐藏 */
	/** 1-模块显示 */
	public final static String MODULE_SHOW = "1";
	/** 2-模块隐藏 */
	public final static String MODULE_HIDE = "2";
	/** 1-模块显示 */
	public final static String MODULE_SHOW_NAME = "显示";
	/** 2-模块隐藏 */
	public final static String MODULE_HIDE_NAME = "隐藏";
	public final static Map<String, String> MODULE_SHOW_HIDE_MAP = new HashMap<String, String>();

	/** 复选框 true */
	public final static String CHECK_TRUE = "on";
	/** 复选框 false */
	public final static String CHECK_FALSE = "off";
	
	/** 是否为叶子 */
	/** 是否为叶子:是 */
	public final static String ISLEAF_TRUE_CODE = "1";
	/** 是否为叶子:否 */
	public final static String ISLEAF_FALSE_CODE = "0";
	/** 是否为叶子:是 */
	public final static boolean ISLEAF_TRUE_VALUE = true;
	/** 是否为叶子:否*/
	public final static boolean ISLEAF_FALSE_VALUE = false;
	public final static Map<String, Boolean> ISLEAF_MAP = new HashMap<String, Boolean>();
	
	/** 角色 */
	/** 1-系统管理员 */
	public final static String ROLE_CODE_1 = "1";
	/** 2-管理员*/
	public final static String ROLE_CODE_2 = "2";
	/** 3-普通用户*/
	public final static String ROLE_CODE_3 = "3";
	/** 1-系统管理员*/
	public final static String ROLE_NAME_1 = "系统管理员";
	/** 2-管理员*/
	public final static String ROLE_NAME_2 = "管理员";
	/** 3-普通用户*/
	public final static String ROLE_NAME_3 = "普通用户";
	public final static Map<String, String> ROLE_MAP = new HashMap<String, String>();

	
	/**
	 * Message
	 * */
	/**
	 * 账目分类 {0} 下存在账目信息，删除失败.
	 * */
	public static final String E_ACCOUNTCATEGORY_DEL = "行号为 {0} 的收支项目下存在账目信息，删除失败.";
	
	/**
	 * 分类 {0} 下存在笔记，删除失败.
	 * */
	public static final String E_CATEGORY_DEL = "分类 {0} 下存在笔记，删除失败.";
	
	/**
	 * 用户名或密码错误.
	 * */
	public static final String E_FAILURE_LOGIN = "用户名或密码错误.";
	
	/**
	 * 登录密码错误.
	 * */
	public static final String E_LOGIN_PASSWORD = "登录密码错误.";
	
	/**
	 * 用户名或邮箱错误.
	 * */
	public static final String E_FAILURE_RESETPWD = "用户名或邮箱错误.";
	
	/**
	 * 原密码错误.
	 * */
	public static final String E_PASSWORD = "原密码错误.";
	
	/**
	 * 两次输入的密码不一致.
	 * */
	public static final String E_REPASSWORD = "两次输入的密码不一致.";
	
	/**
	 * 网络连接超时，请重新登录.
	 * */
	public static final String E_LOGIN_TIMEOUT = "网络连接超时，请重新登录.";
	
	/**
	 * 该用户已被禁用，请联系管理员.
	 * */
	public static final String E_STOP_LOGIN = "该用户已被禁用.";
	
	/**
	 * 账号已存在.
	 * */
	public static final String E_USER_EXIST = "账号已存在.";
	
	/**
	 * 邮箱已被使用.
	 * */
	public static final String E_EMAIL_EXIST = "邮箱已被使用.";
	
	/**
	 * 角色设置错误.
	 * */
	public static final String E_ROLE_ERROR = "角色设置错误.";
	
	/**
	 * 邮件发送失败.
	 * */
	public static final String E_SEND_EMAIL = "邮件发送失败.";
	
	/**
	 * 验证码错误.
	 * */
	public static final String E_VERIFY_CODE = "验证码错误.";
	
	/**
	 * 创建失败，文件名 {0} 重复.
	 * */
	public static final String E_DITTO_FOLDER = "创建失败，文件名 {0} 重复.";
	
	static{
		/** 删除区分 */
		DELFLAG_MAP.put(DEL_FLAG_1, DEL_FLAG_NAME_1);
		DELFLAG_MAP.put(DEL_FLAG_2, DEL_FLAG_NAME_2);
		
		/** 状态 */
		STATUS_MAP.put(STATUS_1, STATUS_NAME_1);
		STATUS_MAP.put(STATUS_2, STATUS_NAME_2);
		
		/** 用户状态 */
		USER_STATUS_MAP.put(USER_STATUS_1, USER_STATUS_NAME_1);
		USER_STATUS_MAP.put(USER_STATUS_2, USER_STATUS_NAME_2);
		
		/** 账目类型 */
		ACCOUNT_TYPE_MAP.put(ACCOUNT_TYPE_1, ACCOUNT_TYPE_NAME_1);
		ACCOUNT_TYPE_MAP.put(ACCOUNT_TYPE_2, ACCOUNT_TYPE_NAME_2);
		
		/** 任务 级别 */
		LEVEL_TYPE_MAP.put(LEVEL_1, LEVEL_NAME_1);
		LEVEL_TYPE_MAP.put(LEVEL_2, LEVEL_NAME_2);
		LEVEL_TYPE_MAP.put(LEVEL_3, LEVEL_NAME_3);
		
		/** 任务完成状态 */
		COMPLETE_TYPE_MAP.put(COMPLETE_TYPE_1, COMPLETE_TYPE_NAME_1);
		COMPLETE_TYPE_MAP.put(COMPLETE_TYPE_2, COMPLETE_TYPE_NAME_2);
		
		/** 性别 */
		SEX_MAP.put(SEX_M, SEX_NAME_M);
		SEX_MAP.put(SEX_F, SEX_NAME_F);
		
		/** 模块 */
		MODULE_SHOW_HIDE_MAP.put(MODULE_SHOW, MODULE_SHOW_NAME);
		MODULE_SHOW_HIDE_MAP.put(MODULE_HIDE, MODULE_HIDE_NAME);
		
		/** 是否为叶子 */
		ISLEAF_MAP.put(ISLEAF_TRUE_CODE, ISLEAF_TRUE_VALUE);
		ISLEAF_MAP.put(ISLEAF_FALSE_CODE, ISLEAF_FALSE_VALUE);
		
		/** 角色Map */
		ROLE_MAP.put(ROLE_CODE_1, ROLE_NAME_1);
		ROLE_MAP.put(ROLE_CODE_2, ROLE_NAME_2);
		ROLE_MAP.put(ROLE_CODE_3, ROLE_NAME_3);
		
		// 加载配置文件
		InputStream is = Constants.class.getClassLoader().getResourceAsStream("../setting.properties");
		Properties p = new Properties();
		try {
			p.load(is);
			// 配置发送邮件服务器
			Constants.EMAIL_SMTP_HOST = p.getProperty("setting.emailSmtpHost");
			Constants.EMAIL_ACCOUNT = p.getProperty("setting.emailAccount");
			Constants.EMAIL_PASSWORD = p.getProperty("setting.emailPassword");
			// 缩略图
			if (StringUtils.isNotEmpty(p.getProperty("setting.imageWidth"))) {
			    Constants.IMAGE_WIDTH = Integer.parseInt(p.getProperty("setting.imageWidth"));
            } else {
                Constants.IMAGE_WIDTH = 140;
            }
			if (StringUtils.isNotEmpty(p.getProperty("setting.imageHeight"))) {
                Constants.IMAGE_HEIGHT = Integer.parseInt(p.getProperty("setting.imageHeight"));
            } else {
                Constants.IMAGE_HEIGHT = 140;
            }
			// 代理设置
			Constants.NETWORK_TYPE = p.getProperty("setting.networkType");
			Constants.PROXY_IP = p.getProperty("setting.proxyIp");
			if (StringUtils.isNotEmpty(p.getProperty("setting.proxyPort"))) {
			    Constants.PROXY_PORT = Integer.parseInt(p.getProperty("setting.proxyPort"));
			} else {
			    Constants.PROXY_PORT = 0;
			}
			Constants.PROXY_USER = p.getProperty("setting.proxyUser");
			Constants.PROXY_PASSWORD = p.getProperty("setting.proxyPassword");
		} catch (IOException e) {
			// 输出日志
			Logger logger = Logger.getLogger(Constants.class);
			logger.error(e.getLocalizedMessage(), e);
		}
	}

}
